package family

import (
	"bufio"
	"fmt"
	"os"
	"path/filepath"
	"strings"

	"gitee.com/zht639/my_gopkg/strtrans"
)

// 读取单个用户文件内容
func readFile(file string) (user, error) {
	f, err := os.Open(file)
	if err != nil {
		return user{}, err
	}
	defer f.Close()
	scanner := bufio.NewScanner(f)
	var u user
	// 读取用户信息
	if scanner.Scan() {
		line := scanner.Text()
		parts := strings.Split(line, " ") // 按英文空格分割
		u.name, u.pwd = parts[0], parts[1]
		u.balance, _ = strtrans.ToFloat(parts[2]) // 转换余额为 float64
	}
	// 读取交易记录
	for scanner.Scan() {
		line := scanner.Text()
		parts := strings.Split(line, " ")
		rec := record{trans_type: parts[0], note: parts[3]}
		rec.balance, _ = strtrans.ToFloat(parts[1])
		rec.money, _ = strtrans.ToFloat(parts[2])
		u.records = append(u.records, rec) // 添加交易记录到用户中
	}
	return u, scanner.Err()
}

// 保存用户数据到文件
func (f *Family) saveData() {
	for _, user := range f.users {
		filePath := filepath.Join(usersDir, user.name+".txt")
		file, err := os.Create(filePath)
		if err != nil {
			fmt.Println("无法保存用户数据:", err)
			continue
		}
		defer file.Close()

		// 写入用户信息
		_, err = fmt.Fprintf(file, "%s %s %s\n", user.name, user.pwd,
			strtrans.ToString(user.balance))
		if err != nil {
			fmt.Println("写入用户信息时出错:", err)
			continue
		}

		// 写入交易记录
		for _, rec := range user.records {
			// 注：若note空，会写入一个空格，这样读取文件时会自动转为空串
			_, err := fmt.Fprintf(file, "%s %s %s %s\n", rec.trans_type,
				strtrans.ToString(rec.balance), strtrans.ToString(rec.money), rec.note)
			if err != nil {
				fmt.Println("写入交易记录时出错:", err)
				continue
			}
		}
	}
}
